package com.shujia.day18;

import java.sql.*;
import java.util.Scanner;

public class Demo06UserLogin {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {



        /*

         */
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://master:3306/bigdata_30?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai", "root", "123456");

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的用户名:");
        String user = null;
        if (scanner.hasNextLine()) {
            user = scanner.nextLine();
        }

        System.out.println("请输入您的密码:");
        String pwd = null;
        if (scanner.hasNextLine()) {
            pwd = scanner.nextLine();
        }

        // SQL中对于字符串需要使用单引号括起来
        /*
            TODO SQL注入
              当密码设置为:'or'1'='1时，就可以绕过密码验证
              如何解决该问题？
                使用预编译操作对象 PreparedStatement 在SQL语句中使用？来代替具体的数据
                对字符串先进行一次编译，再将具体的值传入
                    传入值要求 从1开始 并且?是不需要添加 单引号
         */
//        String sql = "select * from login_user where name='"+user+"'"+"and passwd='"+pwd+"'";
//        System.out.println(sql);
        String sql = "select * from login_user where name=? and passwd=?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,user);
        preparedStatement.setString(2,pwd);

        ResultSet resultSet = preparedStatement.executeQuery();
        // TODO 5.如果当SQL有返回结果，那么需要对结果进行遍历
        if (resultSet.next()){
            System.out.println(user+"存在,登录成功了...");
        }

        // TODO 6.对操作对象以及连接进行关闭操作
        preparedStatement.close();
        connection.close();


    }
}
